R

[R语言] 利用R合成卡农和最炫民族风

这是一次严肃的电子音乐实验

Posted by Leung ZhengHua on 2017-11-18

本文总点击量

程序代码参考网上的MATLAB代码,由于流传已久,找不到原作者,仅引出两篇相对整洁的资源帖

另外,可以上github搜matlab的钢琴gui程序。

我想在R里面自动播放音乐,那么在等运行结果的时候就可以听到提示音

然而调出来的是MediaPlayer,我不是很想看到一个新的窗口出现

我想隐式在后台自动响起

还有,R调用MediaPlayer的时候会一直等待MediaPlayer进程的结束才会把R的session会话交回到你的手上

很笨。

你好,这一行是为了凑字数的。

还有这一行,是为了增加你的阅读时间

被骗了吧


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
###################################################################
# 如何秒变文艺的码农
# -----------------
#
# 引言
## 知乎上有个被浏览5万+次的问题:
## 《程序员大牛与菜鸡分别写音乐播放器,播放同一首歌,音质会有差别吗?》
## 有人回答,差别非常大,笔记本外放我都能听出来,while循环声音更纯,
## 但是复杂混音解析度不够,for循环在对于i的操作过于规整化,
## 导致内存固定周期的读写会产生干扰波,不属于白噪,
## 会导致音乐略微失真。好的播放器尽可能使用静态变量,
## 不得不用非静态的时候尽量让变量创建和删除的时候有高频音或鼓点的遮盖,
## 这个就非常需要经验了。不过现在可以用机器学习来解决。
# 音乐发烧友的知识基础
## 用火电的力度大点,声音偏暖;用水电的声底偏冷,但解析力很高。
## 水电中,以葛州坝的电音色最好;
## 火电中,以北仑电厂的电音质最好(因为烧的无烟煤的比例最高)
## 风力发的电层次感很差,听感朦胧,小提琴部都混在一起。
## 风力发电的单机功率在500w以下的音色都偏薄。
## 核电适合播放《终结者》之类的大片伴音。
## 北方的电都在国家电网上了,所以放什么声音都是混论一片。
## 南方电网以大亚湾核电和两广水电为主,音响既有力度,又比较清澈。
## 太阳能发电声音偏向温暖,不冷,但是有点薄。
# 研究问题
## 利用MATLAB和R合成的电子音乐有没有显著性差异?
#参考网页:
## 卡农:http://blog.csdn.net/Enjolras_fuu/article/details/53668943
## 最炫民族风:http://blog.csdn.net/xiaoding133/article/details/7592736
# main代码
library(tuneR)
fs=44100
dt=1/fs
T16 = 0.25
t16 = seq(0,T16,by=dt)
k=length(t16)
t4=seq(0,4*T16,length.out = 4*k)
t8=seq(0,2*T16,length.out =2*k)
i=length(t4);j=length(t8)
mod4=sin(pi*t4/tail(t4,1))
mod8 = sin(pi*t8/tail(t8,1))
mod16 = sin(pi*t16/tail(t16))
f0 = 2*146.8 #reference frequency
ScaleTable=c(2/3,3/4,5/6,15/16,1,9/8,5/4,4/3,
3/2,5/3,9/5,15/8,2,9/4,5/2,8/3,3,
10/3,15/4,4,1/2,9/16,5/8)
# % 1/4 notes
do0f = mod4*cos(2*pi*ScaleTable[21]*f0*t4);
re0f = mod4*cos(2*pi*ScaleTable[22]*f0*t4);
mi0f = mod4*cos(2*pi*ScaleTable[23]*f0*t4);
fa0f = mod4*cos(2*pi*ScaleTable[1]*f0*t4);
so0f = mod4*cos(2*pi*ScaleTable[2]*f0*t4);
la0f = mod4*cos(2*pi*ScaleTable[3]*f0*t4);
ti0f = mod4*cos(2*pi*ScaleTable[4]*f0*t4);
do1f = mod4*cos(2*pi*ScaleTable[5]*f0*t4);
re1f = mod4*cos(2*pi*ScaleTable[6]*f0*t4);
mi1f = mod4*cos(2*pi*ScaleTable[7]*f0*t4);
fa1f = mod4*cos(2*pi*ScaleTable[8]*f0*t4);
so1f = mod4*cos(2*pi*ScaleTable[9]*f0*t4);
la1f = mod4*cos(2*pi*ScaleTable[10]*f0*t4);
tb1f = mod4*cos(2*pi*ScaleTable[11]*f0*t4);
ti1f = mod4*cos(2*pi*ScaleTable[12]*f0*t4);
do2f = mod4*cos(2*pi*ScaleTable[13]*f0*t4);
re2f = mod4*cos(2*pi*ScaleTable[14]*f0*t4);
mi2f = mod4*cos(2*pi*ScaleTable[15]*f0*t4);
fa2f = mod4*cos(2*pi*ScaleTable[16]*f0*t4);
so2f = mod4*cos(2*pi*ScaleTable[17]*f0*t4);
la2f = mod4*cos(2*pi*ScaleTable[18]*f0*t4);
ti2f = mod4*cos(2*pi*ScaleTable[19]*f0*t4);
do3f = mod4*cos(2*pi*ScaleTable[20]*f0*t4);
blkf=rep(0,i)
# % 1/8 notes
do0e = mod8*cos(2*pi*ScaleTable[21]*f0*t8);
re0e = mod8*cos(2*pi*ScaleTable[22]*f0*t8);
mi0e = mod8*cos(2*pi*ScaleTable[23]*f0*t8);
fa0e = mod8*cos(2*pi*ScaleTable[1]*f0*t8);
so0e = mod8*cos(2*pi*ScaleTable[2]*f0*t8);
la0e = mod8*cos(2*pi*ScaleTable[3]*f0*t8);
ti0e = mod8*cos(2*pi*ScaleTable[4]*f0*t8);
do1e = mod8*cos(2*pi*ScaleTable[5]*f0*t8);
re1e = mod8*cos(2*pi*ScaleTable[6]*f0*t8);
mi1e = mod8*cos(2*pi*ScaleTable[7]*f0*t8);
fa1e = mod8*cos(2*pi*ScaleTable[8]*f0*t8);
so1e = mod8*cos(2*pi*ScaleTable[9]*f0*t8);
la1e = mod8*cos(2*pi*ScaleTable[10]*f0*t8);
tb1e = mod8*cos(2*pi*ScaleTable[11]*f0*t8);
ti1e = mod8*cos(2*pi*ScaleTable[12]*f0*t8);
do2e = mod8*cos(2*pi*ScaleTable[13]*f0*t8);
re2e = mod8*cos(2*pi*ScaleTable[14]*f0*t8);
mi2e = mod8*cos(2*pi*ScaleTable[15]*f0*t8);
fa2e = mod8*cos(2*pi*ScaleTable[16]*f0*t8);
so2e = mod8*cos(2*pi*ScaleTable[17]*f0*t8);
la2e = mod8*cos(2*pi*ScaleTable[18]*f0*t8);
ti2e = mod8*cos(2*pi*ScaleTable[19]*f0*t8);
do3e = mod8*cos(2*pi*ScaleTable[20]*f0*t8);
blke = rep(0,j)
# % 1/16 notes
do0s = mod16*cos(2*pi*ScaleTable[21]*f0*t16);
re0s = mod16*cos(2*pi*ScaleTable[22]*f0*t16);
mi0s = mod16*cos(2*pi*ScaleTable[23]*f0*t16);
fa0s = mod16*cos(2*pi*ScaleTable[1]*f0*t16);
so0s = mod16*cos(2*pi*ScaleTable[2]*f0*t16);
la0s = mod16*cos(2*pi*ScaleTable[3]*f0*t16);
ti0s = mod16*cos(2*pi*ScaleTable[4]*f0*t16);
do1s = mod16*cos(2*pi*ScaleTable[5]*f0*t16);
re1s = mod16*cos(2*pi*ScaleTable[6]*f0*t16);
mi1s = mod16*cos(2*pi*ScaleTable[7]*f0*t16);
fa1s = mod16*cos(2*pi*ScaleTable[8]*f0*t16);
so1s = mod16*cos(2*pi*ScaleTable[9]*f0*t16);
la1s = mod16*cos(2*pi*ScaleTable[10]*f0*t16);
tb1s = mod16*cos(2*pi*ScaleTable[11]*f0*t16);
ti1s = mod16*cos(2*pi*ScaleTable[12]*f0*t16);
do2s = mod16*cos(2*pi*ScaleTable[13]*f0*t16);
re2s = mod16*cos(2*pi*ScaleTable[14]*f0*t16);
mi2s = mod16*cos(2*pi*ScaleTable[15]*f0*t16);
fa2s = mod16*cos(2*pi*ScaleTable[16]*f0*t16);
so2s = mod16*cos(2*pi*ScaleTable[17]*f0*t16);
la2s = mod16*cos(2*pi*ScaleTable[18]*f0*t16);
ti2s = mod16*cos(2*pi*ScaleTable[19]*f0*t16);
do3s = mod16*cos(2*pi*ScaleTable[20]*f0*t16);
blks=rep(0,k)
# % Blank Block
blkblock=c(blkf,blkf,blkf,blkf,blkf,blkf,blkf,blkf,blkf,blkf,blkf,blkf,blkf,blkf,blkf,blkf);
# % Base Melody
cello = c(do1f ,do1f ,so0f, so0f , la0f ,la0f, mi0f,
mi0f ,fa0f, fa0f, do0f, do0f , fa0f, fa0f ,so0f ,so0f);
# % So-FUCKING-Long Melody
violin=c(mi2f,mi2f,re2f,re2f,do2f,do2f,ti1f,ti1f,
la1f,la1f,so1f,so1f,la1f,la1f,ti1f,ti1f,
do2f,do2f,ti1f,ti1f,la1f,la1f,so1f,so1f,
fa1f,fa1f,mi1f,mi1f,fa1f,fa1f,re1f,re1f,
do1f,mi1f,so1f,fa1f,mi1f,do1f,mi1f,re1f,
do1f,la0f,do1f,so1f,fa1f,la1f,so1f,fa1f,
mi1f,do1f,re1f,ti1f,do2f,mi2f,so2f,so1f,
la1f,fa1f,so1f,mi1f,do1f,do2f,blkf,blke,ti1e,
do2e,ti1e,do2e,do1e,ti0e,so1e,re1e,mi1e,
do1e,do2e,ti1e,la1e,ti1e,mi2e,so2e,la2e,
fa2e,mi2e,re2e,fa2e,mi2e,re2e,do2e,ti1e,
la1e,so1e,fa1e,mi1e,re1e,fa1e,mi1e,re1e,
do1e,re1e,mi1e,fa1e,so1e,re1e,so1e,fa1e,
mi1e,la1e,so1e,fa1e,so1e,fa1e,mi1e,re1e,
do1e,la0e,la1e,ti1e,do2e,ti1e,la1e,so1e,
fa1e,mi1e,re1e,la1e,so1e,la1e,so1e,fa1e,
mi1f,mi2e,blke,re2f,re2f,blkf,do1f,mi2f,mi2f,
la2f,la2f,so2f,so2f,la2f,la2f,ti2f,ti2f,
do3e,blke,do2e,blke,ti1f,ti1f,blkf,la1f,do2f,do2f,
do2f,do2f,do2f,do2f,do2f,fa2f,re2f,so2f,
so2e,mi2s,fa2s,so2e,mi2s,fa2s,so2s,so1s,la1s,ti1s,
do2s,re2s,mi2s,fa2s,mi2e,do2s,re2s,
mi2e,mi1s,fa1s,so1s,la1s,so1s,fa1s,so1s,mi1s,fa1s,so1s,
fa1e,la1s,so1s,fa1e,mi1s,re1s,mi1s,re1s,do1s,re1s,mi1s,fa1s,so1s,la1s,
fa2e,la1s,so1s,la1e,ti1s,do2s,so1s,la1s,ti1s,do2s,re2s,mi2s,fa2s,so2s,
mi2e,do2s,re2s,mi2e,re2s,do2s,re2s,ti1s,do2s,re2s,mi2s,re2s,do2s,ti1s,
do2e,la1s,ti1s,do2e,do1s,re1s,mi1s,fa1s,mi1s,re1s,mi1s,do2s,ti1s,do2s,
la1e,do2s,ti1s,la1e,so1s,fa1s,so1s,fa1s,mi1s,fa1s,so1s,la1s,ti1s,do2s,
la2e,do2s,ti1s,do2e,ti1s,la1s,ti1s,do2s,re2s,do2s,ti1s,do1s,la1s,ti1s,
do2e,blke,blkf,ti1e,blke,blkf,la1e,blke,blkf,do2e,blke,blkf,
do1e,blke,blkf,do1e,blke,blkf,do1e,blke,blkf,do1e,blke,blkf,
blkf,so1e,blke,blkf,so1e,blke,blkf,mi1e,blke,blkf,so1e,blke,
blkf,fa1e,blke,blkf,mi1e,blke,blkf,fa1e,blke,blkf,re2e,blke,
mi2e,mi1e,fa1e,mi1e,re1e,re2e,mi2e,re2e,do2e,mi1e,do1e,do2e,ti1e,so0e,fa0e,so0e,
la0e,la1e,so1e,la1e,so1e,so0e,fa0e,so0e,do1e,la1e,so1e,la1e,ti1e,ti0e,la0e,ti0e,
do1e,do2e,re2e,do2e,ti1e,ti0e,do1e,ti0e,la0e,la1e,so1e,la1e,ti1e,ti0e,mi1e,re1e,
do1e,do2e,re2e,fa2e,mi2e,mi1e,so1e,mi2e,do2e,fa2e,mi2e,fa2e,re2e,so1e,fa1e,so1e,
mi1e,so1e,so1e,so1e,so1e,so1e,so1e,so1e,mi1e,mi1e,mi1e,mi1e,mi1e,mi1e,so1e,so1e,
fa1e,fa1e,fa1e,do2e,do2e,do2e,do2e,do2e,do2e,do2e,la1e,la1e,so1e,so1e,re2e,ti1e,
so1e,mi2e,mi2e,mi2e,re2e,re2e,re2e,re2e,do2e,do2e,do2e,do2e,so2e,so2e,so2e,so2e,
la2e,la2e,la2e,la2e,so2e,so2e,so2e,so2e,la2e,la2e,la2e,la2e,ti2e,ti1e,ti1e,ti1e,
do2e,do1s,re1s,mi1e,do1e,ti0e,ti1s,do2s,re2e,ti1e,la1e,la0s,ti0s,do1e,la0e,ti0e,so1s,fa1s,mi1e,re1e,
do1e,mi1s,re1s,do1e,fa1e,mi1e,do1s,re1s,mi1e,so1e,fa1e,la1s,so1s,fa1e,mi1e,re1e,so1s,fa1s,mi1e,re1e,
mi1e,do2s,ti1s,do2e,mi1e,so1e,so1s,la1s,ti1e,so1e,mi1e,do2s,re2s,mi2e,do2e,mi2e,mi2s,re2s,do2e,ti1e,
la1e,la1s,so1s,la1e,ti1e,do2e,mi2s,re2s,do2e,mi2e,fa2e,do2s,ti1s,la1e,la1e,so1e,re1e,so1e,so1e,
so1f,so1f,so1f,so1f,do1f,do1f,do1f,so1f,
fa1f,fa1f,so1f,so1f,fa1f,do1f,do1f,do1e,ti0e,
do1f,do2f,ti1f,ti1f,la1f,la1f,so1f,so1f,
do1f,do1e,re1e,mi1f,mi1f,do2f,do2f,ti1f,ti1f,do2f);
# % cello
c1 = c(cello ,cello ,cello ,cello ,cello,
cello, cello ,cello, cello ,cello,
cello, cello ,cello, cello ,cello,
cello, cello, cello ,cello, cello,
cello, cello ,cello ,blkf);
# % violin1
v1 = c(blkblock, violin, blkblock ,blkblock);
# % violin2
v2 = c(blkblock ,blkblock ,violin ,blkblock);
# % violin3
v3 = c(blkblock,blkblock, blkblock, violin);
# % Get dirty
s = c1+v1+v2+v3;
s = s/max(s);
model=Wave(left = s,right = s,samp.rate=fs*1.5,bit=32,pcm=F)
play(model)
#观察音波变化
model=Wave(left = s,samp.rate=fs,bit=32,pcm=F)
m1=periodogram(model,width = 4096)
f=FF(m1)
melodyplot(m1, noteFromFF(f))
#-------------------
# 最炫民族风
part0 = c(mi1f ,la0e, la0e, do1f ,mi1f ,
re1e ,re1s ,mi1s ,re1e ,do1e ,re1e ,do1e ,la0f ,
mi1f, la0e, la0e ,do1f, mi1f ,
so1e, re1s ,mi1s ,re1e,do1e ,re1e ,do1e ,ti0e ,so0e ,
mi1f ,la0e, la0e ,do1f ,mi1f ,
re1e ,re1s ,mi1s ,re1e ,do1e ,re1e ,do1e, la0e ,so0e ,
mi1f ,la0e ,la0e, do1f ,mi1f ,
so1e ,mi1e ,blkf ,blkf, blkf
);
part1 = c(la0f, la0e, so0e, la0f, la0e, do1e ,
do1f, re1e, do1e, la0f ,la0f ,
do1f ,do1e, so0e, do1e ,re1e, mi1e, so1e ,
so1e ,mi1e, re1f, mi1f ,mi1f ,
la1e ,la1e, la1e, so1e, mi1e ,mi1f ,do1e ,
la0e, la0e ,la0e, mi1e, re1s ,mi1s ,re1e ,re1f ,
mi1e, mi1e, so1e ,mi1e ,re1e, mi1e ,re1e ,do1e ,
la0f ,so0f, la0f ,la0f
);
part2 = c(mi1e ,mi1e, so1e ,mi1e, mi1e, so1e ,so1e ,la1e ,
do2e ,la1e ,so1f, la1s, do2s ,la1e ,la1f ,
la0f, la0e, so0e ,la0f, do1f ,
re1e ,mi1s, re1s ,do1e, re1e ,mi1f, mi1f ,
la0e ,la1e, la1e ,so1e, re1e, mi1s, re1s ,do1e ,re1e ,
mi1f ,mi1f, blke, blke, blkf ,
do1e ,la0e, la0e ,do1e, re1f ,so0e ,so0e ,
mi1e, so1e, mi1e ,re1e, do1f ,do1f ,
la0e ,do1e, re1e, mi1e, re1e ,do1e, so0e ,mi0e ,
la0f ,la0f, blke, blke, blkf
);
part3 = c(la0f, la0e ,so0e, la0f ,do1f ,
re1e ,mi1s ,re1s ,do1e ,re1e ,mi1f ,mi1f ,
la0e ,la1e ,la1e ,so1e ,re1e ,mi1s ,re1s ,do1e ,re1e ,
mi1f ,mi1f ,blke ,blke ,blkf ,
do1e ,la0e ,la0e ,do1e ,re1f ,so0e ,so0e ,
mi1e ,so1e ,mi1e ,re1e ,do1f ,do1e ,do1e ,
la0e ,do1e ,re1e ,mi1e ,so1e ,mi1e ,mi1e ,so1e ,
la1f ,la1f ,la1f ,la1f
);
part4 = c(la1e,la1s,la1s,la1e,la1e,la1e,la1s,so1s,mi1e,re1e,
re1e,re1s,re1s,mi1e,mi1s,so1s,mi1e,mi1s,re1s,do1e,do1s,la0s,
la0f,la0e,so0e,la0f,la0e,do1e,
re1e,mi1s,re1s,do1e,re1e,mi1f,mi1f,
la1e,so1e,mi1e,re1e,so1e,mi1e,re1e,do1e,
do1f,do1f,la0s,do1s,re1s,mi1s,re1s,do1s,la0s,do1s
);
part5 = c(do2e,do2s,do2s,la1e,la1s,la1s,so1e,so1s,so1s,mi1e,mi1s,mi1s,
re1e,mi1s,re1s,do1e,la0s,so0s,la0s,so0s,do1s,re1s,mi1s,so1s,la1s,re2s,
do2f,do2f,blks,blks,blks,blks,do1e,re1e,
mi1f,mi1f,mi1f,so1e,mi1e,
la1f,la1f,la1e,do1e,so1e,mi1e,
re1f,re1e,re1s,re1s,re1e,re1e,do1e,re1e,
mi1f,mi1e,mi1s,mi1s,mi1e,re1s,do1s,ti0e,do1s,re1s,
mi1f,mi1f,mi1f,so1e,mi1e,
do2f,la1f,la1f,la1e,do1e,
re1f,so1f,so1f,la1f,
ti1f,ti1f,ti1f,ti1f
);
part6 = c(blkf,blkf,mi1e,so1e,mi1e,so1e,
mi1f,la0e,la0s,la0s,do1f,la0e,mi1s,la0s,
do1e,do1s,do1s,re1e,do1s,re1s,mi1f,mi1f,
mi1f,la0e,la0s,la0s,so1f,re1e,re1s,re1s,
mi1f,mi1f,mi1s,re1s,do1s,la0s,mi0s,re0s,mi0s,so0s,
do1f,la0e,la0s,la0s,re1f,so0e,so0s,so0s,
mi0f,so0e,so0s,so0s,do1f,do1f,
la0f,do1e,do1s,la0s,mi1e,mi1s,mi1s,re1e,re1s,mi1s
);
s=c(part0,part1,part1,part2,part3,part4,part0,part1,part1,part2,part3,part5,part3,part6,part3);
#s = s/max(s); 标准化会出错
model=Wave(left = s,samp.rate=fs*1.8,bit=32,pcm=F)
play(model)